package cn.wsn2018.tools.mapper;

import cn.wsn2018.tools.model.FieldDesign;
import cn.wsn2018.tools.model.Fields;
import cn.wsn2018.tools.model.FieldsDesignModel;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 主要用于查询数据库中的协议字段的类
 */
public interface FieldsMapper extends BaseMapper<Fields> {
    /**
     * 根据协议名查询该协议所含有的所有字段信息
     * @param protocolName 待查询协议名称
     * @return
     */
    List<Fields> listByProtocolName(String protocolName);

    /**
     * 根据协议名得到协议的id
     * @param protocolName
     * @return
     */
    Integer getProtocolId(String protocolName);

    /**
     * 罗列出安全字段参考设计模板，以列表的形式呈现
     * @return
     */
    List<FieldsDesignModel> listModels();

    /**
     * 向字段设计表中存储字段设计信息
     * @param fieldDesign
     */
    void saveFieldDesign(FieldDesign fieldDesign);

    /**
     * 向用户-协议-字段配置关联表中插入相应的关联信息
     * @param userId
     * @param protocolId
     * @param fieldDesignId
     * @param type
     */
    void saveReFieldDesign(@Param("userId") Integer userId,@Param("protocolId")Integer protocolId,
                           @Param("fieldDesignId")Integer fieldDesignId,@Param("type")String type);

    /**
     * 向字段默认值表中插入相关关联信息
     * @param fieldDesignId 协议字段配置条目
     * @param value 默认值
     */
    void saveReFieldValue(@Param("fieldDesignId")Integer fieldDesignId,@Param("value")String value);

    /**
     * 查询该用户曾经对某一协议所填写的配置项(返回field_design表中的id)
     * @param userId 根据用户名得到的用户表id
     * @param protocolId 根据协议名得到的协议表id
     * @return
     */
    List<Integer> listFieldDesignIds(@Param("userId") Integer userId,@Param("protocolId")Integer protocolId);

    /**
     * 根据协议名和用户名查询用户设计的协议字段
     * @param username 用户名
     * @param protocolName 协议名
     * @return
     */
    List<Fields>  listFieldsByUserAndProtocol(@Param("username") String username,
                                              @Param("protocolName")String protocolName);
}
